/**
 * File:   NetNodeTableModel.java
 * Author: Gvennet
 */
package scenarios.gui;

import dht.identifier.identifier.Identifiers;
import scenarios.net.NetNodeRow;

import javax.swing.table.AbstractTableModel;
import java.util.ArrayList;
import java.util.List;

/**
 * todo write javadoc
 */
public final class NetNodeTableModel extends AbstractTableModel
{

	private static String[] columnIdentifiers = {
			"ID узла",
			"Порт узла",
			"Активность"
	};

	private List<NetNodeRow> nodes = new ArrayList<NetNodeRow>();

	//@Override

	public int getRowCount()
	{
		return nodes.size();
	}

	//@Override

	public int getColumnCount()
	{
		return columnIdentifiers.length;
	}

	@Override
	public String getColumnName(int column)
	{
		return columnIdentifiers[column];
	}

	@Override
	public Class<?> getColumnClass(int column)
	{
		switch (column)
		{

			case 0:
				return Identifiers.class; // todo check why Identifier.class does not work
			case 1:
				return Integer.class;
			case 2:
				return Boolean.class;
			default:
				throw new AssertionError(column);

		}
	}

	//@Override

	public Object getValueAt(int row, int column)
	{
		switch (column)
		{
			case 0:
				return nodes.get(row).getId();
			case 1:
				return nodes.get(row).getPort();
			case 2:
				return nodes.get(row).isActive();
			default:
				throw new AssertionError(column);
		}

	}

	public void addRow(NetNodeRow nodeRow)
	{
		nodes.add(nodeRow);
		fireTableRowsInserted(nodes.size() - 1, nodes.size() - 1);
	}

	public void removeRow(NetNodeRow nodeRow)
	{
		nodes.remove(nodeRow);
		fireTableRowsDeleted(nodes.size() - 1, nodes.size() - 1);
	}


	public void newData(List<NetNodeRow> list)
	{
		nodes.clear();
		nodes.addAll(list);
		fireTableDataChanged();
	}

	public void updateRow(NetNodeRow nodeRow)
	{
		for (int i = 0; i < nodes.size(); i++)
		{
			if (nodes.get(i).equals(nodeRow))
			{
				fireTableRowsUpdated(i, i);
			}
		}
		// fireTableDataChanged();
	}
}